// 引入第三方插件
import Schema from 'validate'
// 实例化配置验证规则
const userinfo = new Schema({
  point: {
    type: String,
    required: true,
    message: '小区不能为空'
  },
  building: {
    type: String,
    required: true,
    message: '小区楼栋'
  },
  room: {
    type: String,
    required: true,
    message: '房间号不能为空'
  },
  name: {
    type: String,
    match: /^([\u4e00-\u9fa5]){2,4}$/,
    required: true,
    message: '请输入正确的姓名'
  },
  mobile: {
    type: String,
    match: /^1[3-9]\d{9}$/,
    required: true,
    message: '请输入正确的电话号码'
  },
  idcardFrontUrl: {
    type: String,
    required: true,
    message: '身份证正面不能为空'
  },
  idcardBackUrl: {
    type: String,
    required: true,
    message: '身份证背面不能为空'
  }
}, { strip: false })
// strip: false解决在验证规则中未设置的属性，数据丢失的问题
Page({
  data: {
    //小区楼栋信息
    building: '',

    // 业主性别0女1男
    gender: 1,

    // 身份证背面
    idcardBackUrl: '',

    //身份证正面
    idcardFrontUrl: '',

    // 业主电话
    mobile: '',

    // 业主姓名
    name: '',

    //小区信息
    point: '',

    //小区房间信息
    room: '',

  },
  onLoad({ point, building, room, id }) {
    if (id) {
      //如果有id的话，将顶部标题设置改为编辑房屋信息
      wx.setNavigationBarTitle({ title: '修改房屋信息' })
      this.getputhouselist(id)
    } else {
      wx.setNavigationBarTitle({ title: '添加房屋信息' })
      // 获取到传入的小区楼栋号，房号数据
      // 将数据保存到data中进行渲染
      this.setData({
        point,
        building,
        room
      })
    }

  },
  // 点击修改传入id数据回填
  async getputhouselist(id) {
    const res = await wx.http.get(`room/${id}`)
    //解构取值，将对象中不需要的属性取出
    // 那么这个对象中就没有这个属性
    if (res.code !== 10000) return wx.utils.toast()
    const { status, ...data } = res.data
    //将解构的需要的数据添加到data中
    // 因为data就是一个对象,所以不需要写在对象中 
    this.setData(data)
  },
  // 上传图片
  onuploadimg(e) {
    const type = e.mark.type
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      sizeType: ['compressed'],
      success: res => {
        // console.log(res);
        // 获取用户上传的本地文件的临时路径
        const tempFilePath = res.tempFiles[0].tempFilePath
        // 使用这个路径将图片上传到服务器中获取远程路径
        wx.uploadFile({
          // 上传的服务器路径
          url: wx.http.baseURL + 'upload',
          // 图片临时路径
          filePath: tempFilePath,
          // 文件二进制key
          name: 'flie',
          // 请求头
          header: {
            Authorization: `Bearer ${getApp().token}`
          },
          // 成功回调
          success: res => {
            console.log(res);
            const arr = JSON.parse(res.data)
            this.setData({
              [type]: arr.data.url
            })
          }
        })
      }
    })
  },
  async submitBtn() {
    // 验证
    // 获取到data中的属性
    const { id, point, building, room, name, mobile, gender, idcardFrontUrl, idcardBackUrl } = this.data
    const params = { id, point, building, room, name, mobile, gender, idcardFrontUrl, idcardBackUrl }

    // 默认如果属性没有在验证规则中出现会自动移除这个属性
    const errors = userinfo.validate(params)
    console.log(errors);
    if (errors.length) {
      wx.utils.toast(errors[0].message)
      return
    }
    console.log(params);
    // 如果在发送请求带上id，如果id没有值
    // 那么id会是undefined，所以需要进行判断，如果id没有值移除掉这个参数
    // 如果有值就是编辑则带上这个参数
    if (id === undefined) {
      delete params.id
    }
    //验证通过
    // 调用接口
    const res = await wx.http.post('room', params)
    console.log(res);
    // 提示用户
    if (res.code !== 10000) return wx.utils.toast('添加失败')
    // 跳转页面
    await wx.reLaunch({
      url: '/house_pkg/pages/list/index',
    })
    wx.utils.toast('添加房屋成功')
  },
  removePicture(ev) {
    //标签绑定点击事件
    // 设置mark属性
    // mark属性的值就是当前点击的图片的属性名
    // 通过事件处理函数的事件对象拿到这个属性名
    // 因为这是移除图片
    // 所以给当前点击的这个属性进行重新赋值为空
    // 移除图片的类型（身份证正面或反面）
    const type = ev.mark?.type
    this.setData({ [type]: '' })
  },
})
